//
// Created by XingfengYang on 2020/7/7.
//
#include "libgfx/font8bits.h"

static const char f8[128][8] = {
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0000 (nul)
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0001
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0002
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0003
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0004
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0005
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0006
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0007
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0008
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0009
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+000A
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+000B
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+000C
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+000D
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+000E
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+000F
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0010
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0011
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0012
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0013
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0014
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0015
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0016
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0017
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0018
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0019
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+001A
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+001B
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+001C
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+001D
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+001E
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+001F
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0020 (space)
        {0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00},// U+0021 (!)
        {0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0022 (")
        {0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00},// U+0023 (#)
        {0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00},// U+0024 ($)
        {0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00},// U+0025 (%)
        {0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00},// U+0026 (&)
        {0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0027 (')
        {0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00},// U+0028 (()
        {0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00},// U+0029 ())
        {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00},// U+002A (*)
        {0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00},// U+002B (+)
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06},// U+002C (,)
        {0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00},// U+002D (-)
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00},// U+002E (.)
        {0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00},// U+002F (/)
        {0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00},// U+0030 (0)
        {0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00},// U+0031 (1)
        {0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00},// U+0032 (2)
        {0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00},// U+0033 (3)
        {0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00},// U+0034 (4)
        {0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00},// U+0035 (5)
        {0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00},// U+0036 (6)
        {0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00},// U+0037 (7)
        {0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00},// U+0038 (8)
        {0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00},// U+0039 (9)
        {0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00},// U+003A (:)
        {0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06},// U+003B (//)
        {0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00},// U+003C (<)
        {0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00},// U+003D (=)
        {0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00},// U+003E (>)
        {0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00},// U+003F (?)
        {0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00},// U+0040 (@)
        {0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00},// U+0041 (A)
        {0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00},// U+0042 (B)
        {0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00},// U+0043 (C)
        {0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00},// U+0044 (D)
        {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00},// U+0045 (E)
        {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00},// U+0046 (F)
        {0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00},// U+0047 (G)
        {0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00},// U+0048 (H)
        {0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00},// U+0049 (I)
        {0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00},// U+004A (J)
        {0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00},// U+004B (K)
        {0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00},// U+004C (L)
        {0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00},// U+004D (M)
        {0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00},// U+004E (N)
        {0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00},// U+004F (O)
        {0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00},// U+0050 (P)
        {0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00},// U+0051 (Q)
        {0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00},// U+0052 (R)
        {0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00},// U+0053 (S)
        {0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00},// U+0054 (T)
        {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00},// U+0055 (U)
        {0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00},// U+0056 (V)
        {0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00},// U+0057 (W)
        {0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00},// U+0058 (X)
        {0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00},// U+0059 (Y)
        {0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00},// U+005A (Z)
        {0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00},// U+005B ([)
        {0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00},// U+005C (\)
        {0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00},// U+005D (])
        {0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00},// U+005E (^)
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF},// U+005F (_)
        {0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00},// U+0060 (`)
        {0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00},// U+0061 (a)
        {0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00},// U+0062 (b)
        {0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00},// U+0063 (c)
        {0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00},// U+0064 (d)
        {0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00},// U+0065 (e)
        {0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00},// U+0066 (f)
        {0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F},// U+0067 (g)
        {0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00},// U+0068 (h)
        {0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00},// U+0069 (i)
        {0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E},// U+006A (j)
        {0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00},// U+006B (k)
        {0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00},// U+006C (l)
        {0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00},// U+006D (m)
        {0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00},// U+006E (n)
        {0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00},// U+006F (o)
        {0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F},// U+0070 (p)
        {0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78},// U+0071 (q)
        {0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00},// U+0072 (r)
        {0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00},// U+0073 (s)
        {0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00},// U+0074 (t)
        {0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00},// U+0075 (u)
        {0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00},// U+0076 (v)
        {0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00},// U+0077 (w)
        {0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00},// U+0078 (x)
        {0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F},// U+0079 (y)
        {0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00},// U+007A (z)
        {0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00},// U+007B ({)
        {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00},// U+007C (|)
        {0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00},// U+007D (})
        {0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},// U+007E (~)
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F
};

uint8_t *font_8_bits(int c) { return (uint8_t *) f8[c]; }

static const uint16_t winApp16Bits[16] = {
        0b0000000000000000, 0b0111111001111110, 0b0111111001111110, 0b0111111001111110,
        0b0111111001111110, 0b0111111001111110, 0b0111111001111110, 0b0000000000000000,
        0b0000000000000000, 0b0111111001111110, 0b0111111001111110, 0b0111111001111110,
        0b0111111001111110, 0b0111111001111110, 0b0111111001111110, 0b0000000000000000};

uint16_t *win_app_16_bits() { return (uint16_t *) winApp16Bits; }

static const uint16_t winMax16Bits[16] = {
        0b0000000000000000, 0b0000000000000000, 0b0011111111111100, 0b0011111111111100,
        0b0011000000001100, 0b0011000000001100, 0b0011000000001100, 0b0011000000001100,
        0b0011000000001100, 0b0011000000001100, 0b0011000000001100, 0b0011000000001100,
        0b0011111111111100, 0b0011111111111100, 0b0000000000000000, 0b0000000000000000};

uint16_t *win_max_16_bits() { return (uint16_t *) winMax16Bits; }

static const uint16_t winMin16Bits[16] = {
        0b0000000000000000, 0b0000000000000000, 0b0000000000000000, 0b0000000000000000,
        0b0000000000000000, 0b0000000000000000, 0b0000000000000000, 0b0000000000000000,
        0b0000000000000000, 0b0000000000000000, 0b0000000000000000, 0b0000000000000000,
        0b0011111111111100, 0b0011111111111100, 0b0000000000000000, 0b0000000000000000};

uint16_t *win_min_16_bits() { return (uint16_t *) winMin16Bits; }

static const uint16_t winClose16Bits[16] = {
        0b0000000000000000,
        0b0000000000000000,
        0b0111000000001110,
        0b0011100000011100,
        0b0001110000111000,
        0b0000111001110000,
        0b0000011111100000,
        0b0000001111000000,
        0b0000001111000000,
        0b0000011111100000,
        0b0000111001110000,
        0b0001110000111000,
        0b0011100000011100,
        0b0111000000001110,
        0b0000000000000000,
        0b0000000000000000,
};

uint16_t *win_close_16_bits() { return (uint16_t *) winClose16Bits; }
